package com.colorlight.cloud.gateway.api.message.instruct.api;


import com.colorlight.cloud.gateway.api.message.constraint.schedule.ScheduleActions;
import com.colorlight.cloud.gateway.api.message.model.CommandData;
import com.google.protobuf.MessageLite;

import java.util.Collection;

/**
 * @author Demon
 * 消息下发规范
 * 本层实现:实际得消息下发
 */
public interface PublishCommand {
	/**
	 * 打包消息下发 将消息转换下发
	 *
	 * @param commandData 抽象消息类型  {{@link CommandData}}
	 * @return 消息id（可重复）
	 * @author Demon
	 **/
	Long publishCommandData(CommandData<?> commandData);
	
	/**
	 * 批量消息下发
	 *
	 * @param topics 主题集合
	 * @param msg    转为protobuf对象的消息
	 **/
	Long publishMessageLite(Collection<String> topics, MessageLite msg);
	
	/**
	 * @param scheduleActions 指令实体
	 * @param uuid            屏幕标识
	 * @param seqId           指令id
	 * @return 打包的指令
	 * @author Demon
	 */
	MessageLite packInstruction(ScheduleActions scheduleActions, String uuid, Long seqId);
}
